Datos auxiliares

Para realizar conversiones a dolares de poder adquisitivo constante cargamos los datos del tipo de cambio de paridad (actualizado hasta 2018) y el índice de precios al consumidor de Estados Unidos.

#TC
tcp_arg <- as.data.table(read_excel("../resultados/argentina/renta_de_la_tierra_hidrocarburifera_arg.xlsx", sheet = "tipo_cambio")) 
tcp_arg = tcp_arg[,!c("sv", "fuente"), with = F]

#IPC Arg
ipc_arg <- as.data.table(read_csv("../data/indices/ipc_annual_avg.csv"))

#CPI EEUU
ipc_us <- as.data.table(read_csv("../data/bls/cpi.csv")) 
setnames(ipc_us,"Year", "anio"  )
ipc_us = ipc_us[, .(ipc_us_20 = mean(Value, na.rm=T)), by = anio]
ipc_us[, ipc_us_20 := generar_indice(serie = ipc_us_20, 
                                    fecha = anio, fecha_base = 2020)]

Costos

\[Q\_total = Q_{petróleo} + Q_{gas} \] Donde:

\[ Costos\_totales = CI + MS + ConKfijo\]

Donde:

\[Costos\_totales\_con\_Gcia = Costos\_totales + Gcia\_Normal_{hidrocarburífera} \] Donde:

\[ Precio\_costo = \frac{Costos\_totales}{Q\_total} \] Donde: * \(Precio\_costo\) = Precio de costo en BOE

A partir de esto se puede calcular un costo recuperable del petróleo y del gas

\[Costo\_crudo = Q_{petróleo} * Precio\_costo\] \[Costo\_gas = Q_{gas} * Precio\_costo\]

\[Precio\_produccion = \frac{Costos\_totales\_con\_Gcia}{Q\_total}\]

\[Precio\_vta\_potencial = \frac{Q\_total*Pext_{petróleo} - Costos\_totales}{Q\_total} \]

Donde: * \(Precio\_produccion\)= Precio de produccion * \(Precio_vta_potencial\) = Precio de venta potencial * \(Pext_{petróleo}\) = Precio de exportación/referencia internacional del petróleo crudo

costos <- read_excel("../resultados/argentina/renta_de_la_tierra_hidrocarburifera_arg.xlsx", sheet = "costos_pg_ccnn") 

costos %>%
           filter(anio > 1997) %>%
  ggplot(aes(anio, Pcost, color = fuente))+
  geom_line(alpha = 0.5, size = 1.4)+
    labs(title = "Precio de costo",
         subtitle= "Estimacion propia a partir de CCNN y reestimacion de VBP con criterio CCNN",
         y = "USD/BOE", x = "Año")

Inversiones

Inversiones comprometidas

Metros y pozos perforados

Stock invertido

Activos

Pasar datos de bs de uso en yacimientos para armar relación activo yacimeinto/total

Fuentes: * Balances de Bolsar (unicamente empresas que cotizan en la bolsa de valores argentina). Revisar el stock del sector distribución porque se presenta demasiado grande con respecto al de los demás. Falta pasar los datos del activo de casi todas las empresas * AFIP. Con esta fuente no tenemos calculo de renta, sino que solo usamos la TG como parámetro. Nota: "_c" significa casos presentados de la variable correspondiente * Memorias de YPF. La década de los 80 presenta picos que hay que revisar

  • Calculo del Capital Total Adelantado (KTA)

    • Bolsar: Es equivalente a la suma de Propiedad, Planta y Equipos Neta (descontando los terrenos y obras en curso) y los Inventarios. Cuando los datos lo habilitan, se le agregó los salarios adelantados (salarios y cargas consumidos sobre rotación). Luego, cuando no se presentaron datos de Propiedad, Planta y Equipos, se tomó el activo no corriente.
    • AFIP: Es equivalente a la suma de Bienes de Uso, Bienes de Cambio, Inventarios y Disponibilidades.
    • Memoria YPF: Suma de Bienes de Uso y Bienes de Cambio
# write.csv(stock_rama, file ="/Archivos/Datos/Stock/stock_hidrocarburos.csv")

Stock de segmentos de YPF y Petrobras

Stock por empresas

YPF largo plazo

Comparación entre la Memoria YPF (recopilado por BFR) y los balances extríados de Bolsar


# PENSAR ALGO ASI PERO MAS ACEPTABLE 
# graf_stock_rama <- stock_rama %>%
#   # mutate(valor = number_format(valor, big.mark = " " )) %>%
#   filter(sector != "distribucion") %>%
#   ggplot(aes(anio, valor, color = sector, shape = fuente))+
#   geom_line()+
#   geom_point(size = .8)+
#   theme(legend.position = "bottom")+
#   labs(title = "Stock de capital adelantado y activo de segmentos",
#        subtitle = "Subsectores del sector hidrocarburífero",
#        y = "Millones de pesos de 2018")+
#   theme_classic()+
#   facet_wrap(~ variable )
# 
# ggplotly(graf_stock_rama, width = 800, height = 400)

Pasivos

Ratio de endeudamiento

Extraído de la visualización de NOC’s (ref) \[ Endeudamiento = \frac{Pasivo}{Patrimonio Neto} \]

nocs_df = fread(  "../resultados/comparacion_paises/nocs.csv")
plt_endeu <- nocs_df %>% 
  ggplot(aes(year, ratio_endeudamiento ,group = year))+
  geom_boxplot() +
  # geom_point(aes(color = company))+
  # geom_line(aes(group = company))+
  geom_line(data = nocs_df %>% filter(company == "PDVSA"), 
            aes(year, ratio_endeudamiento,color = "PDVSA", group = company), size = 1)+
  geom_line(data = nocs_df %>% filter(company == "YPF"), 
            aes(year, ratio_endeudamiento,color = "YPF", group = company), size = 1)+
  scale_color_manual(name = "Empresa", 
                     labels = c("PDVSA", "YPF"),
                     values = c(  "brown4", "blue1"))+
                     # values = c("PDVSA" =  "red", "YPF" = "blue"))+
  theme(legend.position = "bottom")+
  labs(title = "Ratio de endeudamiento de NOC's", x = "", y="",
       subtitle = "YPF y PDVSA frente al resto de la distribución")+
  ylim(-3, 5 )
plt_endeu 

Rentabilidad

\[TG_{hidrocarburos} = \frac{PV_{hidrocarburífera}}{KTA_{hidrocarburífero}}\]

Total

tasa_ganancia_rama_stock = read_excel("../resultados/argentina/renta_de_la_tierra_hidrocarburifera_arg.xlsx", sheet = "tg_pg_total")
# tasa de ganancia
graf_tg_rama_2 <- tasa_ganancia_rama_stock %>%
  filter(anio >1995) %>%
  ggplot(aes(anio, TG_pg, color = stock_seleccionado))+
  geom_line(aes(anio, TG_manuf))+
  geom_line(alpha = 0.5)+
  geom_point()+
  scale_y_continuous(labels = scales::percent)+
  theme(axis.text.x = element_text(angle = 90),
        legend.position = "bottom")

plot_ggplotly(graf_tg_rama_2 , 
              title = "Tasa de ganancia hidrocarburífera con PPyE a partir de stock de pozos (1960 - 2018)")

Por subsector

tg_x_sector = balances_arg %>%
  # filter(unidad == "Millones de pesos") %>%
  filter(unidad == "Millones de pesos") %>%
  group_by(fecha, sector) %>%
  summarise("TG antes de impuestos" = sum(gcia_ant,na.rm = T)/sum (KTA,na.rm = T),
         "TG despues de impuestos" = sum(gcia_ant, impuesto_gcia, na.rm = T)/sum(KTA, na.rm = T ) ) %>%
  gather(key = variable, value = valor, 3:4) %>%
  filter(variable =="TG despues de impuestos") %>%
  ggplot(aes(fecha, valor, color = sector))+
  geom_line()+
  geom_point()+
  geom_hline(yintercept = 0)+
  scale_y_continuous(labels = scales::percent)+
  theme(axis.text.x = element_text(angle = 90))+
  facet_wrap(~variable)
`summarise()` has grouped output by 'fecha'. You can override using the `.groups` argument.
plot_ggplotly(tg_x_sector,title = "Tasa de ganancia empresas hidrocarburos",
       subtitle =  "Antes y después de impuestos" )

Segmentos YPF y Petrobras

graf_tg_petrobras <- petrobras_ar_seg %>%
  filter(sector %in% c("petroquimica", "downstream", "upstream", "gas_y_energia")) %>%
  # filter(sector != "adm_central") %>%
  ggplot(aes(fecha, tg, color = sector))+
  geom_line()+
  # facet_wrap(~sector)+
  scale_y_continuous(labels = scales::percent)+
  theme(axis.text.x = element_text(angle = 90))+
  labs(title = "Tasa de ganancia de segmentos Petrobras Argentina")
graf_tg_petrobras

Por empresa

LS0tDQp0aXRsZTogIkNvc3RvcywgaW52ZXJzaW9uZXMgeSByZW50YWJpbGlkYWQiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCiNsaW1waWV6YSBkZSBtZW1vcmlhDQpybShsaXN0ID1scygpKQ0KZ2MoKQ0KDQojIGNvbmZpZ3VyYWNpw7NuIGRlIGltcHJlc2nDs24NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCm9wdGlvbnMod2FybiA9IC0xLCBtZXNzYWdlID0gLTEpIA0KDQoNCiMgYmlibGlvdGVjYXMNCmxpYnJhcnkoZGF0YS50YWJsZSkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShyZWFkeGwpDQpzb3VyY2UoImZ1bmN0aW9uZXNfaGlkcm9jYXJidXJvcy5SIikNCg0KIyBwYXLDoW1ldHJvcyBwYXJhIGxvcyBncmFmaWNvcw0KYWxwaGFfbiA9IDAuNw0KYGBgDQoNCg0KDQojIERhdG9zIGF1eGlsaWFyZXMNClBhcmEgcmVhbGl6YXIgY29udmVyc2lvbmVzIGEgZG9sYXJlcyBkZSBwb2RlciBhZHF1aXNpdGl2byBjb25zdGFudGUgY2FyZ2Ftb3MgbG9zIGRhdG9zIGRlbCB0aXBvIGRlIGNhbWJpbyBkZSBwYXJpZGFkIChhY3R1YWxpemFkbyBoYXN0YSAyMDE4KSB5IGVsIMOtbmRpY2UgZGUgcHJlY2lvcyBhbCBjb25zdW1pZG9yIGRlIEVzdGFkb3MgVW5pZG9zLiANCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojVEMNCnRjcF9hcmcgPC0gYXMuZGF0YS50YWJsZShyZWFkX2V4Y2VsKCIuLi9yZXN1bHRhZG9zL2FyZ2VudGluYS9yZW50YV9kZV9sYV90aWVycmFfaGlkcm9jYXJidXJpZmVyYV9hcmcueGxzeCIsIHNoZWV0ID0gInRpcG9fY2FtYmlvIikpIA0KdGNwX2FyZyA9IHRjcF9hcmdbLCFjKCJzdiIsICJmdWVudGUiKSwgd2l0aCA9IEZdDQoNCiNJUEMgQXJnDQppcGNfYXJnIDwtIGFzLmRhdGEudGFibGUocmVhZF9jc3YoIi4uL2RhdGEvaW5kaWNlcy9pcGNfYW5udWFsX2F2Zy5jc3YiKSkNCg0KI0NQSSBFRVVVDQppcGNfdXMgPC0gYXMuZGF0YS50YWJsZShyZWFkX2NzdigiLi4vZGF0YS9ibHMvY3BpLmNzdiIpKSANCnNldG5hbWVzKGlwY191cywiWWVhciIsICJhbmlvIiAgKQ0KaXBjX3VzID0gaXBjX3VzWywgLihpcGNfdXNfMjAgPSBtZWFuKFZhbHVlLCBuYS5ybT1UKSksIGJ5ID0gYW5pb10NCmlwY191c1ssIGlwY191c18yMCA6PSBnZW5lcmFyX2luZGljZShzZXJpZSA9IGlwY191c18yMCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWNoYSA9IGFuaW8sIGZlY2hhX2Jhc2UgPSAyMDIwKV0NCmBgYA0KDQoNCiMgQ29zdG9zDQoNCiQkUVxfdG90YWwgPSBRX3twZXRyw7NsZW99ICsgUV97Z2FzfSAkJA0KRG9uZGU6DQogIA0KICAqICRRXF90b3RhbCQgPSBDYW50aWRhZGVzIHByb2R1Y2lkYXMgZGUgcGV0csOzbGVvIHkgZ2FzIGVuIEJhcnJpbGVzIEVxdWl2YWxlbnRlcyBkZSBQZXRyw7NsZW8NCiAgKiAkUV97cGV0csOzbGVvfSQgPSBDYW50aWRhZGVzIHByb2R1Y2lkYXMgZGUgcGV0csOzbGVvIGNydWRvIGVuIGJhcnJpbGVzIGVxdWl2YWxlbnRlcyBkZSBwZXRyw7NsZW8gKEJPRSkNCiAgKiAkUV97Z2FzfSQgPSBDYW50aWRhZGVzIHByb2R1Y2lkYXMgZGUgZ2FzIG5hdHVyYWwgZW4gYmFycmlsZXMgZXF1aXZhbGVudGVzIGRlIHBldHLDs2xlbyAoQk9FKQ0KICANCg0KJCQgQ29zdG9zXF90b3RhbGVzID0gIENJICsgTVMgKyBDb25LZmlqbyQkDQoNCkRvbmRlOg0KDQoqICRDb3N0b3NcX3RvdGFsZXMkID0gQ29zdG9zIHRvdGFsZXMgaGlkcm9jYXJidXLDrWZlcm9zDQoqICRDSSQgPSBDb25zdW1vIEludGVybWVkaW8sIGRpc3RpbnRhcyBlc3RpbWFjaW9uZXMNCiogJE1TJCA9IE1hc2EgU2FsYXJpYWwsIGRpc3RpbnRhcyBlc3RpbWFjaW9uZXMNCiogJENvbktmaWpvJCA9IENvbnN1bW8gZGUgQ2FwaXRhbCBGaWpvDQoNCg0KJCRDb3N0b3NcX3RvdGFsZXNcX2NvblxfR2NpYSA9IENvc3Rvc1xfdG90YWxlcyArIEdjaWFcX05vcm1hbF97aGlkcm9jYXJidXLDrWZlcmF9ICQkDQpEb25kZToNCg0KKiAkQ29zdG9zXF90b3RhbGVzXF9jb25cX0djaWEkID0gQ29zdG9zIHRvdGFsZXMgaGlkcm9jYXJidXLDrWZlcm9zIGNvbiBnYW5hbmNpYSBub3JtYWwgDQoqICRHY2lhXF9Ob3JtYWxfe2hpZHJvY2FyYnVyw61mZXJhfSQgPSBHYW5hbmNpYSBub3JtYWwgZGVsIHNlY3RvciBoaWRyb2NhcmJ1csOtZmVybw0KDQokJCBQcmVjaW9cX2Nvc3RvID0gXGZyYWN7Q29zdG9zXF90b3RhbGVzfXtRXF90b3RhbH0gICAkJA0KRG9uZGU6DQoqICRQcmVjaW9cX2Nvc3RvJCA9IFByZWNpbyBkZSBjb3N0byBlbiBCT0UNCg0KQSBwYXJ0aXIgZGUgZXN0byBzZSBwdWVkZSBjYWxjdWxhciB1biBjb3N0byByZWN1cGVyYWJsZSBkZWwgcGV0csOzbGVvIHkgZGVsIGdhcw0KDQokJENvc3RvXF9jcnVkbyA9IFFfe3BldHLDs2xlb30gKiBQcmVjaW9cX2Nvc3RvJCQNCiQkQ29zdG9cX2dhcyA9IFFfe2dhc30gKiBQcmVjaW9cX2Nvc3RvJCQNCg0KDQokJFByZWNpb1xfcHJvZHVjY2lvbiA9IFxmcmFje0Nvc3Rvc1xfdG90YWxlc1xfY29uXF9HY2lhfXtRXF90b3RhbH0kJA0KDQokJFByZWNpb1xfdnRhXF9wb3RlbmNpYWwgPSAgXGZyYWN7UVxfdG90YWwqUGV4dF97cGV0csOzbGVvfSAtIENvc3Rvc1xfdG90YWxlc317UVxfdG90YWx9ICQkDQoNCg0KRG9uZGU6DQoqICRQcmVjaW9cX3Byb2R1Y2Npb24kPSBQcmVjaW8gZGUgcHJvZHVjY2lvbg0KKiAkUHJlY2lvX3Z0YV9wb3RlbmNpYWwkID0gUHJlY2lvIGRlIHZlbnRhIHBvdGVuY2lhbA0KKiAkUGV4dF97cGV0csOzbGVvfSQgPSBQcmVjaW8gZGUgZXhwb3J0YWNpw7NuL3JlZmVyZW5jaWEgaW50ZXJuYWNpb25hbCBkZWwgcGV0csOzbGVvIGNydWRvDQoNCmBgYHtyfQ0KY29zdG9zIDwtIHJlYWRfZXhjZWwoIi4uL3Jlc3VsdGFkb3MvYXJnZW50aW5hL3JlbnRhX2RlX2xhX3RpZXJyYV9oaWRyb2NhcmJ1cmlmZXJhX2FyZy54bHN4Iiwgc2hlZXQgPSAiY29zdG9zX3BnX2Njbm4iKSANCg0KY29zdG9zICU+JQ0KICAgICAgICAgICBmaWx0ZXIoYW5pbyA+IDE5OTcpICU+JQ0KICBnZ3Bsb3QoYWVzKGFuaW8sIFBjb3N0LCBjb2xvciA9IGZ1ZW50ZSkpKw0KICBnZW9tX2xpbmUoYWxwaGEgPSAwLjUsIHNpemUgPSAxLjQpKw0KICAgIGxhYnModGl0bGUgPSAiUHJlY2lvIGRlIGNvc3RvIiwNCiAgICAgICAgIHN1YnRpdGxlPSAiRXN0aW1hY2lvbiBwcm9waWEgYSBwYXJ0aXIgZGUgQ0NOTiB5IHJlZXN0aW1hY2lvbiBkZSBWQlAgY29uIGNyaXRlcmlvIENDTk4iLA0KICAgICAgICAgeSA9ICJVU0QvQk9FIiwgeCA9ICJBw7FvIikNCg0KYGBgDQoNCiMgSW52ZXJzaW9uZXMNCg0KIyMgSW52ZXJzaW9uZXMgY29tcHJvbWV0aWRhcw0KDQojIyBNZXRyb3MgeSBwb3pvcyBwZXJmb3JhZG9zDQoNCiMgU3RvY2sgaW52ZXJ0aWRvDQojIyBBY3Rpdm9zDQpQYXNhciBkYXRvcyBkZSBicyBkZSB1c28gZW4geWFjaW1pZW50b3MgcGFyYSBhcm1hciByZWxhY2nDs24gYWN0aXZvIHlhY2ltZWludG8vdG90YWwNCg0KRnVlbnRlczoNCiogQmFsYW5jZXMgZGUgQm9sc2FyICh1bmljYW1lbnRlIGVtcHJlc2FzIHF1ZSBjb3RpemFuIGVuIGxhIGJvbHNhIGRlIHZhbG9yZXMgYXJnZW50aW5hKS4gUmV2aXNhciBlbCBzdG9jayBkZWwgc2VjdG9yIGRpc3RyaWJ1Y2nDs24gcG9ycXVlIHNlIHByZXNlbnRhIGRlbWFzaWFkbyBncmFuZGUgY29uIHJlc3BlY3RvIGFsIGRlIGxvcyBkZW3DoXMuIEZhbHRhIHBhc2FyIGxvcyBkYXRvcyBkZWwgYWN0aXZvIGRlIGNhc2kgdG9kYXMgbGFzIGVtcHJlc2FzDQoqIEFGSVAuIENvbiBlc3RhIGZ1ZW50ZSBubyB0ZW5lbW9zIGNhbGN1bG8gZGUgcmVudGEsIHNpbm8gcXVlIHNvbG8gdXNhbW9zIGxhIFRHIGNvbW8gcGFyw6FtZXRyby4gTm90YTogIl9jIiBzaWduaWZpY2EgY2Fzb3MgcHJlc2VudGFkb3MgZGUgbGEgdmFyaWFibGUgY29ycmVzcG9uZGllbnRlDQoqIE1lbW9yaWFzIGRlIFlQRi4gTGEgZMOpY2FkYSBkZSBsb3MgODAgcHJlc2VudGEgcGljb3MgcXVlIGhheSBxdWUgcmV2aXNhcg0KDQoNCiogQ2FsY3VsbyBkZWwgQ2FwaXRhbCBUb3RhbCBBZGVsYW50YWRvIChLVEEpIA0KDQogICsgQm9sc2FyOiBFcyBlcXVpdmFsZW50ZSBhIGxhIHN1bWEgZGUgUHJvcGllZGFkLCBQbGFudGEgeSBFcXVpcG9zIE5ldGEgKGRlc2NvbnRhbmRvIGxvcyB0ZXJyZW5vcyB5IG9icmFzIGVuIGN1cnNvKSB5IGxvcyBJbnZlbnRhcmlvcy4gQ3VhbmRvIGxvcyBkYXRvcyBsbyBoYWJpbGl0YW4sIHNlIGxlIGFncmVnw7MgbG9zIHNhbGFyaW9zIGFkZWxhbnRhZG9zIChzYWxhcmlvcyB5IGNhcmdhcyBjb25zdW1pZG9zIHNvYnJlIHJvdGFjacOzbikuIEx1ZWdvLCBjdWFuZG8gbm8gc2UgcHJlc2VudGFyb24gZGF0b3MgZGUgUHJvcGllZGFkLCBQbGFudGEgeSBFcXVpcG9zLCBzZSB0b23DsyBlbCBhY3Rpdm8gbm8gY29ycmllbnRlLg0KICArIEFGSVA6IEVzIGVxdWl2YWxlbnRlIGEgbGEgc3VtYSBkZSBCaWVuZXMgZGUgVXNvLCBCaWVuZXMgZGUgQ2FtYmlvLCBJbnZlbnRhcmlvcyB5IERpc3BvbmliaWxpZGFkZXMuDQogICsgTWVtb3JpYSBZUEY6IFN1bWEgZGUgQmllbmVzIGRlIFVzbyB5IEJpZW5lcyBkZSBDYW1iaW8NCg0KYGBge3J9DQojIHdyaXRlLmNzdihzdG9ja19yYW1hLCBmaWxlID0iL0FyY2hpdm9zL0RhdG9zL1N0b2NrL3N0b2NrX2hpZHJvY2FyYnVyb3MuY3N2IikNCmBgYA0KDQoNCiMjIyBTdG9jayBkZSBzZWdtZW50b3MgZGUgWVBGIHkgUGV0cm9icmFzDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0Kc3RvY2tfc2VnbWVudG9zID0gZnJlYWQoIi4uL3Jlc3VsdGFkb3MvYXJnZW50aW5hL2Jhc2VfY3N2L3N0b2NrX3NlZ21lbnRvcy5jc3YiKQ0KZ3JhZl9zdG9ja19zZWdtZW50b3MgPC0gc3RvY2tfc2VnbWVudG9zICU+JQ0KICBsZWZ0X2pvaW4odGNwX2FyZywgYnk9ICJhbmlvIikgJT4lIA0KICBnZ3Bsb3QoYWVzKGFuaW8sIHZhbG9yL1RDYywgY29sb3IgPSBzZWN0b3IpKSsNCiAgZ2VvbV9saW5lKCkrDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSsNCiAgbGFicyh5ID0gIk1pbGxvbmVzIGRlIGTDs2xhcmVzIGNvcnJpZW50ZXMiKSsNCiAgdGhlbWVfY2xhc3NpYygpKw0KICBmYWNldF93cmFwKHZhcmlhYmxlIH4gZW1wcmVzYSAsIHNjYWxlcyA9ICJmcmVlIikNCg0KcGxvdF9nZ3Bsb3RseShncmFmX3N0b2NrX3NlZ21lbnRvcyx0aXRsZSA9ICJTdG9jayBkZSBjYXBpdGFsIGRlIHNlZ21lbnRvcyIsDQogICAgICAgc3VidGl0bGUgPSAiWVBGIHkgUGV0cm9icmFzIEFyZ2VudGluYSIpDQpgYGANCg0KIyMjIFN0b2NrIHBvciBlbXByZXNhcw0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0Kc3RvY2tfYmFsYW5jZXNfZW1wcmVzYXMgPSBmcmVhZCgiLi4vcmVzdWx0YWRvcy9hcmdlbnRpbmEvYmFzZV9jc3Yvc3RvY2tfYmFsYW5jZXNfZW1wcmVzYXMuY3N2IikNCmdyYWZfc3RvY2tfZW1wIDwtIHN0b2NrX2JhbGFuY2VzX2VtcHJlc2FzICU+JQ0KICBmaWx0ZXIoDQogICAgIyB2YXJpYWJsZSAlaW4lIGMoIktUQSIsICJhY3Rpdm8iKSwNCiAgICAgICAgIHNlY3RvciAhPSAiZGlzdHJpYnVjaW9uIikgJT4lDQogIGdncGxvdChhZXMoYW5pbywgdmFsb3IsIGNvbG9yID0gZW1wcmVzYSkpKw0KICBnZW9tX2xpbmUoKSsNCiAgZ2VvbV9wb2ludCgpKw0KICBsYWJzKCB5ID0gIk1pbGxvbmVzIGRlIHBlc29zIGRlIDIwMTgiKSsNCiAgZmFjZXRfd3JhcCh+dmFyaWFibGUpDQoNCnBsb3RfZ2dwbG90bHkoZ3JhZl9zdG9ja19lbXAsIHRpdGxlID0gIlN0b2NrIGRlIGNhcGl0YWwgcG9yIGVtcHJlc2EiKQ0KDQpgYGANCg0KIyMjIFlQRiBsYXJnbyBwbGF6bw0KQ29tcGFyYWNpw7NuIGVudHJlIGxhIE1lbW9yaWEgWVBGIChyZWNvcGlsYWRvIHBvciBCRlIpIHkgbG9zIGJhbGFuY2VzIGV4dHLDrWFkb3MgZGUgQm9sc2FyDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0Kc3RvY2tfeXBmID0gZnJlYWQoICIuLi9yZXN1bHRhZG9zL2FyZ2VudGluYS9iYXNlX2Nzdi9zdG9ja195cGYuY3N2IikNCmdyYWZfc3RvY2tfeXBmIDwtICBzdG9ja195cGYgJT4lDQogIGdncGxvdChhZXMoYW5pbywgdmFsb3IsIGNvbG9yID0gc2VjdG9yKSkrDQogIGdlb21fbGluZSgpKw0KICBnZW9tX3BvaW50KCkrDQogIGxhYnMoeSA9ICJNaWxsb25lcyBkZSBwZXNvcyBkZSAyMDE4IikrDQogIGZhY2V0X3dyYXAofnZhcmlhYmxlLCBuY29sID0gMSwgc2NhbGVzID0gImZyZWUiKQ0KcGxvdF9nZ3Bsb3RseShncmFmX3N0b2NrX3lwZiwgdGl0bGUgPSAiU3RvY2sgZGUgY2FwaXRhbCBkZSBZUEYiKQ0KDQpgYGANCmBgYHtyfQ0KDQojIFBFTlNBUiBBTEdPIEFTSSBQRVJPIE1BUyBBQ0VQVEFCTEUgDQojIGdyYWZfc3RvY2tfcmFtYSA8LSBzdG9ja19yYW1hICU+JQ0KIyAgICMgbXV0YXRlKHZhbG9yID0gbnVtYmVyX2Zvcm1hdCh2YWxvciwgYmlnLm1hcmsgPSAiICIgKSkgJT4lDQojICAgZmlsdGVyKHNlY3RvciAhPSAiZGlzdHJpYnVjaW9uIikgJT4lDQojICAgZ2dwbG90KGFlcyhhbmlvLCB2YWxvciwgY29sb3IgPSBzZWN0b3IsIHNoYXBlID0gZnVlbnRlKSkrDQojICAgZ2VvbV9saW5lKCkrDQojICAgZ2VvbV9wb2ludChzaXplID0gLjgpKw0KIyAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSsNCiMgICBsYWJzKHRpdGxlID0gIlN0b2NrIGRlIGNhcGl0YWwgYWRlbGFudGFkbyB5IGFjdGl2byBkZSBzZWdtZW50b3MiLA0KIyAgICAgICAgc3VidGl0bGUgPSAiU3Vic2VjdG9yZXMgZGVsIHNlY3RvciBoaWRyb2NhcmJ1csOtZmVybyIsDQojICAgICAgICB5ID0gIk1pbGxvbmVzIGRlIHBlc29zIGRlIDIwMTgiKSsNCiMgICB0aGVtZV9jbGFzc2ljKCkrDQojICAgZmFjZXRfd3JhcCh+IHZhcmlhYmxlICkNCiMgDQojIGdncGxvdGx5KGdyYWZfc3RvY2tfcmFtYSwgd2lkdGggPSA4MDAsIGhlaWdodCA9IDQwMCkNCmBgYA0KDQoNCiMjIFBhc2l2b3MNCiMjIyBSYXRpbyBkZSBlbmRldWRhbWllbnRvDQpFeHRyYcOtZG8gZGUgbGEgdmlzdWFsaXphY2nDs24gZGUgTk9DJ3MgKHJlZikNCiQkIEVuZGV1ZGFtaWVudG8gPSBcZnJhY3tQYXNpdm99e1BhdHJpbW9uaW8gTmV0b30gJCQNCmBgYHtyfQ0Kbm9jc19kZiA9IGZyZWFkKCAgIi4uL3Jlc3VsdGFkb3MvY29tcGFyYWNpb25fcGFpc2VzL25vY3MuY3N2IikNCnBsdF9lbmRldSA8LSBub2NzX2RmICU+JSANCiAgZ2dwbG90KGFlcyh5ZWFyLCByYXRpb19lbmRldWRhbWllbnRvICxncm91cCA9IHllYXIpKSsNCiAgZ2VvbV9ib3hwbG90KCkgKw0KICAjIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gY29tcGFueSkpKw0KICAjIGdlb21fbGluZShhZXMoZ3JvdXAgPSBjb21wYW55KSkrDQogIGdlb21fbGluZShkYXRhID0gbm9jc19kZiAlPiUgZmlsdGVyKGNvbXBhbnkgPT0gIlBEVlNBIiksIA0KICAgICAgICAgICAgYWVzKHllYXIsIHJhdGlvX2VuZGV1ZGFtaWVudG8sY29sb3IgPSAiUERWU0EiLCBncm91cCA9IGNvbXBhbnkpLCBzaXplID0gMSkrDQogIGdlb21fbGluZShkYXRhID0gbm9jc19kZiAlPiUgZmlsdGVyKGNvbXBhbnkgPT0gIllQRiIpLCANCiAgICAgICAgICAgIGFlcyh5ZWFyLCByYXRpb19lbmRldWRhbWllbnRvLGNvbG9yID0gIllQRiIsIGdyb3VwID0gY29tcGFueSksIHNpemUgPSAxKSsNCiAgc2NhbGVfY29sb3JfbWFudWFsKG5hbWUgPSAiRW1wcmVzYSIsIA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiUERWU0EiLCAiWVBGIiksDQogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCAgImJyb3duNCIsICJibHVlMSIpKSsNCiAgICAgICAgICAgICAgICAgICAgICMgdmFsdWVzID0gYygiUERWU0EiID0gICJyZWQiLCAiWVBGIiA9ICJibHVlIikpKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikrDQogIGxhYnModGl0bGUgPSAiUmF0aW8gZGUgZW5kZXVkYW1pZW50byBkZSBOT0MncyIsIHggPSAiIiwgeT0iIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJZUEYgeSBQRFZTQSBmcmVudGUgYWwgcmVzdG8gZGUgbGEgZGlzdHJpYnVjacOzbiIpKw0KICB5bGltKC0zLCA1ICkNCnBsdF9lbmRldSANCmBgYA0KDQoNCiMgUmVudGFiaWxpZGFkDQokJFRHX3toaWRyb2NhcmJ1cm9zfSA9IFxmcmFje1BWX3toaWRyb2NhcmJ1csOtZmVyYX19e0tUQV97aGlkcm9jYXJidXLDrWZlcm99fSQkDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQojbGV2YW50byBkYXRhIHNldHMgZGUgb3RybyBSIG1hcmtkb3duDQpiYWxhbmNlc19hcmcgPC0gcmVhZF9jc3YoIi4uL2RhdGEvYmFsYW5jZXMvYmFsYW5jZXNfYXJnLmNzdiIsIA0KICAgIGNvbF90eXBlcyA9IGNvbHMoZmVjaGEgPSBjb2xfZGF0ZShmb3JtYXQgPSAiJVktJW0tJWQiKSwgWDEgPSBjb2xfc2tpcCgpKSkNCg0KcGV0cm9icmFzX2FyZ19zZWdtZW50b3MgPC0gcmVhZF9jc3YoIi4uL2RhdGEvYmFsYW5jZXMvcGV0cm9icmFzX2FyZ19zZWdtZW50b3MuY3N2IiwgDQogICAgY29sX3R5cGVzID0gY29scyhYMSA9IGNvbF9za2lwKCkpKQ0KDQp5cGZfc2VnbWVudG9zIDwtIHJlYWRfY3N2KCIuLi9kYXRhL3lwZi95cGZfc2VnbWVudG9zLmNzdiIsIA0KICAgIGNvbF90eXBlcyA9IGNvbHMoWDEgPSBjb2xfc2tpcCgpKSkNCg0KYGBgDQoNCiMjIFRvdGFsDQpgYGB7cn0NCnRhc2FfZ2FuYW5jaWFfcmFtYV9zdG9jayA9IHJlYWRfZXhjZWwoIi4uL3Jlc3VsdGFkb3MvYXJnZW50aW5hL3JlbnRhX2RlX2xhX3RpZXJyYV9oaWRyb2NhcmJ1cmlmZXJhX2FyZy54bHN4Iiwgc2hlZXQgPSAidGdfcGdfdG90YWwiKQ0KIyB0YXNhIGRlIGdhbmFuY2lhDQpncmFmX3RnX3JhbWFfMiA8LSB0YXNhX2dhbmFuY2lhX3JhbWFfc3RvY2sgJT4lDQogIGZpbHRlcihhbmlvID4xOTk1KSAlPiUNCiAgZ2dwbG90KGFlcyhhbmlvLCBUR19wZywgY29sb3IgPSBzdG9ja19zZWxlY2Npb25hZG8pKSsNCiAgZ2VvbV9saW5lKGFlcyhhbmlvLCBUR19tYW51ZikpKw0KICBnZW9tX2xpbmUoYWxwaGEgPSAwLjUpKw0KICBnZW9tX3BvaW50KCkrDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpDQoNCnBsb3RfZ2dwbG90bHkoZ3JhZl90Z19yYW1hXzIgLCANCiAgICAgICAgICAgICAgdGl0bGUgPSAiVGFzYSBkZSBnYW5hbmNpYSBoaWRyb2NhcmJ1csOtZmVyYSBjb24gUFB5RSBhIHBhcnRpciBkZSBzdG9jayBkZSBwb3pvcyAoMTk2MCAtIDIwMTgpIikNCmBgYA0KDQoNCiMjIFBvciBzdWJzZWN0b3INCmBgYHtyfQ0KdGdfeF9zZWN0b3IgPSBiYWxhbmNlc19hcmcgJT4lDQogICMgZmlsdGVyKHVuaWRhZCA9PSAiTWlsbG9uZXMgZGUgcGVzb3MiKSAlPiUNCiAgZmlsdGVyKHVuaWRhZCA9PSAiTWlsbG9uZXMgZGUgcGVzb3MiKSAlPiUNCiAgZ3JvdXBfYnkoZmVjaGEsIHNlY3RvcikgJT4lDQogIHN1bW1hcmlzZSgiVEcgYW50ZXMgZGUgaW1wdWVzdG9zIiA9IHN1bShnY2lhX2FudCxuYS5ybSA9IFQpL3N1bSAoS1RBLG5hLnJtID0gVCksDQogICAgICAgICAiVEcgZGVzcHVlcyBkZSBpbXB1ZXN0b3MiID0gc3VtKGdjaWFfYW50LCBpbXB1ZXN0b19nY2lhLCBuYS5ybSA9IFQpL3N1bShLVEEsIG5hLnJtID0gVCApICkgJT4lDQogIGdhdGhlcihrZXkgPSB2YXJpYWJsZSwgdmFsdWUgPSB2YWxvciwgMzo0KSAlPiUNCiAgZmlsdGVyKHZhcmlhYmxlID09IlRHIGRlc3B1ZXMgZGUgaW1wdWVzdG9zIikgJT4lDQogIGdncGxvdChhZXMoZmVjaGEsIHZhbG9yLCBjb2xvciA9IHNlY3RvcikpKw0KICBnZW9tX2xpbmUoKSsNCiAgZ2VvbV9wb2ludCgpKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkrDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApKSsNCiAgZmFjZXRfd3JhcCh+dmFyaWFibGUpDQoNCnBsb3RfZ2dwbG90bHkodGdfeF9zZWN0b3IsdGl0bGUgPSAiVGFzYSBkZSBnYW5hbmNpYSBlbXByZXNhcyBoaWRyb2NhcmJ1cm9zIiwNCiAgICAgICBzdWJ0aXRsZSA9ICAiQW50ZXMgeSBkZXNwdcOpcyBkZSBpbXB1ZXN0b3MiICkNCmBgYA0KIyMjIFNlZ21lbnRvcyBZUEYgeSBQZXRyb2JyYXMNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpncmFmX3RnX3lwZiA8LSB5cGZfc2VnICU+JQ0KICAjIGZpbHRlcihzZWN0b3IgJWluJSBjKCJxdWltaWNhIiwgImRvd25zdHJlYW0iLCAidXBzdHJlYW0iKSkgJT4lDQogIGZpbHRlcihzZWN0b3IgIT0gImFkbV9jZW50cmFsIikgJT4lDQogIGdncGxvdChhZXMoZmVjaGEsIHRnX2FjdGl2bywgY29sb3IgPSBzZWN0b3IpKSsNCiAgZ2VvbV9saW5lKCkrDQogIGdlb21fcG9pbnQoKSsNCiAgIyBmYWNldF93cmFwKH5zZWN0b3IpKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCkpKw0KICBsYWJzKHRpdGxlID0gIlRhc2EgZGUgZ2FuYW5jaWEgZGUgc2VnbWVudG9zIFlQRiIpDQpncmFmX3RnX3lwZg0KYGBgDQpgYGB7cn0NCmdyYWZfdGdfcGV0cm9icmFzIDwtIHBldHJvYnJhc19hcl9zZWcgJT4lDQogIGZpbHRlcihzZWN0b3IgJWluJSBjKCJwZXRyb3F1aW1pY2EiLCAiZG93bnN0cmVhbSIsICJ1cHN0cmVhbSIsICJnYXNfeV9lbmVyZ2lhIikpICU+JQ0KICAjIGZpbHRlcihzZWN0b3IgIT0gImFkbV9jZW50cmFsIikgJT4lDQogIGdncGxvdChhZXMoZmVjaGEsIHRnLCBjb2xvciA9IHNlY3RvcikpKw0KICBnZW9tX2xpbmUoKSsNCiAgIyBmYWNldF93cmFwKH5zZWN0b3IpKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCkpKw0KICBsYWJzKHRpdGxlID0gIlRhc2EgZGUgZ2FuYW5jaWEgZGUgc2VnbWVudG9zIFBldHJvYnJhcyBBcmdlbnRpbmEiKQ0KZ3JhZl90Z19wZXRyb2JyYXMNCmBgYA0KDQoNCiMjIFBvciBlbXByZXNhDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZ3JhZl90Z19lbXAgPC0gYmFsYW5jZXNfYXJnICU+JQ0KICBmaWx0ZXIodGdfYW50ICE9IEluZikgJT4lDQogIGdncGxvdChhZXMoZmVjaGEsIHRnX2FudCwgY29sb3IgPSBlbXByZXNhKSkrDQogIGdlb21fbGluZSgpKw0KICBnZW9tX3BvaW50KCkrDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSkrDQogIGZhY2V0X3dyYXAofnNlY3RvcikNCg0KcGxvdF9nZ3Bsb3RseShncmFmX3RnX2VtcCwgdGl0bGUgPSAiVGFzYSBkZSBnYW5hbmNpYSBlbXByZXNhcyBoaWRyb2NhcmJ1cm9zIiwNCiAgICAgICBzdWJ0aXRsZSA9ICAiQW50ZXMgZGUgaW1wdWVzdG9zIikNCmBgYA0KDQo=